#include<bits/stdc++.h>
#define ll long long
using namespace std;

const ll mod=1e9+7;

int n,m,x,U;
char s[100005];
int y,mn;
int dp[1<<5|5][1<<5|5],tp[1<<5|5][1<<5|5];
ll ans;

inline ll fpow(ll a,ll b)
{
    ll res=1;

    while(b)
    {
        if(b&1)
            res=res*a%mod;

        a=a*a%mod;
        b>>=1;
    }

    return res;
}

int main()
{
    freopen("pearl.in","r",stdin);
    freopen("pearl.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);

    cin>>n>>m>>x;
    cin>>s;

    mn=m;
    for(int i=0;i<m;i++)
    {
        if(s[i]=='1')
        {
            mn=i;
            break;
        }
    }

    if(mn==m||((n&1)&&(x&1)))
    {
        if(n<=2)
        {
            cout<<"0\n";
            return 0;
        }

        if(n&1)
        {
            if(x&1)
            {
                ans=1;
                ll pk=fpow(2,n>>1);
                pk=(pk*(pk-1)/2)%mod;
                ll ttp=fpow(2,n>>1),tmp=(fpow(2,(n>>1)-1)+1)%mod,tk=fpow(2,(n>>1)-1);
                for(int i=1;i<m;i++)
                {
                    ans=(ans*ttp+tmp)%mod;
                    tmp=(tmp*tk+1)%mod;
                }
                cout<<ans*fpow((ttp<<1)%mod,m-1)%mod*pk%mod<<'\n';
            }
            else
            {
                if(n==3)
                {
                    cout<<"0\n";
                    return 0;
                }

                n--;
                ans=1;
                ll pk=fpow(2,(n-1)>>1);
                pk=(pk*(pk-1)/2)%mod;
                ll ttp=fpow(2,(n-1)>>1),tmp=(fpow(2,((n-1)>>1)-1)+1)%mod,tk=fpow(2,((n-1)>>1)-1);
                for(int i=1;i<m;i++)
                {
                    ans=(ans*ttp+tmp)%mod;
                    tmp=(tmp*tk+1)%mod;
                }
                cout<<ans*fpow(2,m+1)%mod*pk%mod*fpow((ttp<<2)%mod,m-1)%mod<<'\n';
            }
        }
        else
        {
            ans=1;
            ll pk=fpow(2,(n-1)>>1);
            pk=(pk*(pk-1)/2)%mod;
            ll ttp=fpow(2,(n-1)>>1),tmp=(fpow(2,((n-1)>>1)-1)+1)%mod,tk=fpow(2,((n-1)>>1)-1);
            for(int i=1;i<m;i++)
            {
                ans=(ans*ttp+tmp)%mod;
                tmp=(tmp*tk+1)%mod;
            }
            cout<<ans*2%mod*pk%mod*fpow((ttp<<2)%mod,m-1)%mod<<'\n';
        }

        return 0;
    }

    if(m==1)
    {
        cout<<fpow(fpow(2,(n>>1)-1),2)%mod<<'\n';
        return 0;
    }

    y=1<<mn;
    U=1<<m;
    dp[0][y]=1;

    for(int i=1;i<x;i++)
    {
        for(int j=0;j<U;j++)
        {
            for(int k=0;k<U;k++)
            {
                for(int l=0;l<U;l++)
                    tp[j^(k*l%U)][l]=(tp[j^(k*l%U)][l]+dp[j][k])%mod;
            }
        }

        for(int j=0;j<U;j++)
        {
            for(int k=0;k<U;k++)
                dp[j][k]=tp[j][k],tp[j][k]=0;
        }
    }

    for(int i=0;i<U;i++)
    {
        for(int j=0;j<U;j++)
            tp[i][y]=(tp[i][y]+dp[i][j])%mod;
    }

    for(int i=0;i<U;i++)
    {
        for(int j=0;j<U;j++)
            dp[i][j]=tp[i][j],tp[i][j]=0;
    }

    for(int i=1;i<=n-x;i++)
    {
        for(int j=0;j<U;j++)
        {
            for(int k=0;k<U;k++)
            {
                for(int l=0;l<U;l++)
                    tp[j^(k*l%U)][l]=(tp[j^(k*l%U)][l]+dp[j][k])%mod;
            }
        }

        for(int j=0;j<U;j++)
        {
            for(int k=0;k<U;k++)
                dp[j][k]=tp[j][k],tp[j][k]=0;
        }
    }

    for(int i=0;i<U;i++)
    {
        for(int j=0;j<U;j++)
        {
            ans=(ans+1LL*i*dp[i][j])%mod;
            dp[i][j]=0;
        }
    }

    cout<<ans<<'\n';

    return 0;
}
